/*
		* Author:	 Sander
		* Date:		 12-apr-2011
		* Name:		 Scene
		* Version:	1.0
		*
		* This code is property of Sander blahblahblah copyright blahblah.
*/


package javaraytracer;

import java.util.ArrayList;
import javaraytracer.Materials.*;
import javaraytracer.Objects.*;

//PENDING:add function/property description
public class Scene
{

	private ArrayList objects;

	public Scene()
	{
		objects = new ArrayList();

		//objects
		// Left: -X, Right: +X
		// Up: +Y, Down -Y
		// Depth: Z
		// Plane: position = -normal * distance, so 0,0,1 (forward) with 40 gives a position on -40, apperantly
		// Attributes:
		// Plane( Vec3 position, distance, Material )
		// Sphere( Vec3 position, radius, Material )
		// Material( Vec3 color, Vec3 ambient, float reflectance, float specular, boolean castshadow, boolean drawshadow)

		objects.add( new Plane( new Vec3( 0.0, 0.0, -1.0 ), 60.0f, new Material( new Vec3( 1.0, 1.0, 1.0 ), Vec3.EMPTY, 0.0f, 0.0f) ) );
		//objects.add( new Plane( new Vec3( 0.0, -1.0, 0.0 ), 5.0f, new Material( new Vec3( 1.0, 1.0, 1.0 ), 0.8f, 0.0f, 0.0f) ) );

		//objects.add( new Sphere( new Vec3(2.0, 0.0, 5.0), 2.0f, new Material( new Vec3( 1.0, 0.0, 0.0 ), 0.0f, 0.2f, 0.0f) ) );
/*
		objects.add( new OBJModel(new Vec3(0.0, 0.0, 20.0), "content/models/kubus.obj", new Vec3(0.0, 0.0, 0.0), 1.0,
				Material.WHITE));
*/

		objects.add( new OBJModel(new Vec3(0.0, -2.0, 25.0), "content/models/teapot/teapot.obj", new Vec3(-0.0, -1.1, 0.5), 0.5,
				null));

		//objects.add( new OBJModel(new Vec3(2.0, 0.0, 10.0), "content/models/kubus.obj", new Vec3(0.0, 0.0, 0.0),
				//new Material(new Vec3(1.0, 1.0, 1.0), 0.3f, 0.5f, 0.0f), 1.0 ));

		//lights
		//Light( Vec3 position, Vec3 color, intensity )

		objects.add( new Light( new Vec3( -3.0, 1.0, 5.0), new Vec3( 1.0, 1.0, 1.0), 1.0f, 100) );
		//objects.add( new Light( new Vec3( 2.0, 1.0, 6.0), new Vec3( 1.0, 0.9, 0.6), 1.0f, 100) );
		//objects.add( new Light( new Vec3( 0, -1.5, 12), new Vec3( 1.0, 1.0, 1.0), 1.0f, 100) );
		

	}

	public ArrayList getObjects()
	{
		return objects;
	}

}


